//
//  HomeTableViewController.swift
//  SinaWeibo
//
//  Created by gaoliang on 15/11/9.
//  Copyright © 2015年 gaoliang. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

//定义首页标识符
private let HomeCellId = "HomeCellId"
class HomeTableViewController: BaseTableViewController {
    // 数据源 模型数组
    private lazy var statuses = [Status]()
    override func viewDidLoad() {
        super.viewDidLoad()
//        visitorView?.setUIInfo(nil, title: "关注一些人，回这里看看有什么惊喜")
        //更改后可以解决 cell 重用
        if !userLogin {
            visitorView?.setUIInfo(nil, title: "关注一些人，回这里看看有什么惊喜")
            return
        }
        
        // 准备 tableView
        prepareTableView()
        // 获取网络数据
        loadData()
    }
  
    private func prepareTableView() {
        
        // 设置下拉刷新
        refreshControl = UIRefreshControl()
        // 添加监听方法
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        
        // 1.注册
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellId)

        //  自动计算行高
        // 预估行高
        tableView.estimatedRowHeight = 200
        // 需要指定自动计算行高 必须有一个自上而下的约束
        tableView.rowHeight = UITableViewAutomaticDimension
        // 设置分割线
        tableView.separatorStyle = .None
        
        tableView.tableFooterView = indicatorView
    }
    
    //MARK: 加载微博首页数据
           @objc private func loadData() {
    
            //确定 since_id
            //注意 如果 max_id 和 since_id 同时有值 服务器不会给任何数据
            var since_id = 0
            var max_id = 0
            if indicatorView.isAnimating() {
                //上啦加载更多数据
                since_id = 0
                max_id = statuses.last?.id ?? 0
            } else {
                //下拉刷新
                max_id = 0
                since_id = statuses.first?.id ?? 0
            }
            
    
            //加载数据
            StatusListViewModel.loadData(since_id: since_id, max_id: max_id) { (array) -> () in
    
                print(array?.count)
                self.refreshControl?.endRefreshing()
                
                if array == nil {
                    // 请求失败
                    SVProgressHUD.showErrorWithStatus(AppErrorTip)
                    //加载数据失败 停止动画
                    self.indicatorView.stopAnimating()
                    return
                }
                // 一定拿到数据 赋值
                if since_id > 0 {
                    //下拉刷新 直接追加数据
                    self.statuses = array! + self.statuses
                } else if max_id > 0 {
                    //上拉加载更多
                    self.statuses += array!
                    //加载数据完成 停止动画
                    self.indicatorView.stopAnimating()
                } else{
                    //首次加载
                    self.statuses = array!
                }
                
                // 刷新表格
                self.tableView.reloadData()
            }
        }
    

    private lazy var indicatorView: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
        
        return indicator
    }()
    
}

// 定义了 extension 包含了所有的数据源方法 和协议方法
extension HomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellId, forIndexPath: indexPath) as! StatusCell
        cell.status = statuses[indexPath.row]
        if indexPath.row == statuses.count - 1 && !indicatorView.isAnimating() {
        //倒数第二行 加载更多数据 并且小菊花没有转动的时候 再加载更多数据
            indicatorView.startAnimating()
            loadData()
            //开始默默加载数据
            print("开始默默加载数据")
        }
        return cell
    }
}







